Vagrant 做 Docker V8s 的测试环境 (1) 初始化 Vagrant 集群

Vagrant 使用回顾

  • [Vagrant 的安装使用](Vagrant 的安装使用.md)
  • [Vagrant 做 Docker 机器的测试环境](Vagrant 做 Docker 机器的测试环境.md)
  • [Vagrant 本地 Box 指定版本号](Vagrant 本地 Box 指定版本号.md)

虽然没有整理成为一个系列, 内容略有重复, 但是还是囊括了这两年使用 Vagrant 遇到的大部分问题.

基本 Vagrant 操作分为

管理 Box: box add, box list, box remove

管理虚拟机: init 初始化, up 唤起, status/global-status 查看状态, ssh 链接, reload 重新加载配置, halt 关机, suspend/resume 暂停/恢复, destroy 删除.

管理 Snapshot: snapshot save 生成快照, snapshot list 查看列表, snapshot restore 恢复, snapshot delete 删除

模拟 Docker V8s 测试环境

文章最后附上经过修改的启动脚本 Vagrantfile, 使用 vagrant up 可以一次性启动 5 台 Node 服务器, 1 台 Master 服务器, 1 台 Ansible 运维机, 使用 vagrant status 查看服务器状态.

SSH 连接虚拟机

在文件夹目录下 vagrant ssh SERVER_NAME 可以直接链接.

由于前面使用了 insert_key = false 使得每个虚拟机都不单独生成各自的 ssh key, 统一使用系统默认的 insecure_private_key, 位于主机 ~/.vagrant.d/ 目录下, 进行连接的时候, ssh vagrant@SERVER_IP_ADDR -i ~/.vagrant.d/insecure_private_key 即可链接.

虚拟机的暂停与恢复, 快照与恢复

使用 suspend 暂停, resume 恢复虚拟机.

1
2
vagrant suspend [SERVER_NAME]
vagrant resume [SERVER_NAME]

使用 snapshot save 生成快照, snapshot restore 恢复快照, snapshot list 查看快照.

1
2
vagrant snapshot save [SERVER_NAME] SNAPSHOT_NAME
vagrant snapshot restore [SERVER_NAME] SNAPSHOT_NAME

PS: 如果指定 SERVER_NAME 则是对单个虚拟机操作, 不指定则操作所有虚拟机.
PS: 在 Windows 上做测试的时候, 所有命令必须带 SERVER_NAME 才能生效… o(╥﹏╥)o

虚拟机配置文件修改后的应用生效

1
vagrant reload [SERVER_NAME] --provision

Vagrantfile 脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|

# K8s Node
(1..5).each do |i|
config.vm.define "s#{i}" do |node|
# 设置使用默认的 ssh key
node.ssh.insert_key = false

# 使用的 box 名称
node.vm.box = "centos/7"
# 设置 hostname
node.vm.hostname = "s#{i}"

# node.vm.box_check_update = false

# 端口映射
# node.vm.network "forwarded_port", guest: 80, host: 8080
# node.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

# 网络配置
# node.vm.network "private_network", ip: "192.168.33.10"
# node.vm.network "public_network"
node.vm.network "private_network", ip: "10.0.5.10#{i}"

# 主机文件夹映射
node.vm.synced_folder "./data", "/data"

# virtualbox 做虚拟机实现的配置
node.vm.provider "virtualbox" do |vb|
vb.cpus = 1
vb.name = "s#{i}"
vb.memory = 512
end

# 启动的时候执行的任务
node.vm.provision "shell", run: "always", inline: <<-SHELL
yum install -y ntp
ntpdate 1.pool.ntp.org
SHELL
node.vm.provision "shell", run: "always", inline: "echo `hostname` ip: 10.0.5.10#{i}"
end
end

# K8s Master
config.vm.define "host" do |node|
node.ssh.insert_key = false

node.vm.box = "centos/7"
node.vm.hostname = "host"
node.vm.network "private_network", ip: "10.0.5.200"
node.vm.synced_folder "./data", "/data"

node.vm.provider "virtualbox" do |vb|
vb.cpus = 1
vb.name = "host"
vb.memory = 1024
end

node.vm.provision "shell", run: "always", inline: <<-SHELL
yum install -y ntp
ntpdate 1.pool.ntp.org
SHELL
node.vm.provision "shell", run: "always", inline: "echo `hostname` ip: 10.0.5.200"
end

# 运维用主机
config.vm.define "master" do |node|
node.ssh.insert_key = false

node.vm.box = "centos/7"
node.vm.hostname = "master"
node.vm.network "private_network", ip: "10.0.5.100"
node.vm.synced_folder "./data", "/data"

node.vm.provider "virtualbox" do |vb|
vb.cpus = 2
vb.name = "master"
vb.memory = 1024
end

node.vm.provision "shell", run: "always", inline: <<-SHELL
yum install -y ntp
ntpdate 1.pool.ntp.org
SHELL
node.vm.provision "shell", run: "always", inline: "echo `hostname` ip: 10.0.5.100"
end
end
Donate - Support to make this site better.
捐助 - 支持我让我做得更好.